package Pgrade;



import java.sql.*;
//
import java.util.ArrayList;
import java.util.List;

public class LoginDao
//dao：这个包下主要是一些关于数据库的操作
//dao.DButils：数据库的创建和删除
//dao.LoginDaolmp：数据库与用户的交互操作，包括检验用户登录的账号是否合法，当用户注册时将账号插入数据库。
//Servlet：实现javaweb的前后端交互
//UserRegister：用户注册，当注册新用户时会跳转到此，实现将新用户的账号密码插入数据库中。
//UserServlet：用户登录，当用户登录账号时会跳转到此，实现对用户账号密码的合法性检验。
//DAO接口： 把对数据库的所有操作定义成抽象方法，可以提供多种实现。
//DAO 实现类： 针对不同数据库给出DAO接口定义方法的具体实现。
//实体类：用于存放与传输对象数据。
//数据库连接和关闭工具类： 避免了数据库连接和关闭代码的重复使用，方便修改
{

    public ArrayList<UserPojo> findByUname(String p_username) throws SQLException {
//创建连接 localhost:1433;DatabaseName=数据库名
        Connection conn = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;DatabaseName=xie", "sa", "123456");
        //sql中的？代表占位符，  预处理执行器特有
        String sql = "select id,username,password from user_mst where username=?";
        PreparedStatement ps = conn.prepareStatement(sql);
        //填充第几个？
        ps.setString(1,p_username);
        // 跟数据里存储过程第一个字段比较
        ArrayList<UserPojo> ulist = new ArrayList<>();
        //动态数组
        ResultSet rs = ps.executeQuery();
        //数据库李集的数据表
        while (rs.next())
        //循环语句
        {
           UserPojo pojo = new UserPojo();
           //一个简单的java类
            ulist.add(pojo);
            //添加元素覆盖
            pojo.setId(rs.getInt(1));
            //设置id
            pojo.setUsername(rs.getString(2));
            //设置用户名
            pojo.setPassword(rs.getString(3));
            //设置密码
            //   pojo.setSex(rs.getString(4));
            //   pojo.setDate(rs.getString(5));

        }
        conn.close();
        //关闭
        return ulist;
        //结束表
    }

    public int addUserInfo(String v1, String v2, int v3) throws SQLException {
// 2. 创建连接 localhost:1433;DatabaseName=数据库名
        Connection conn = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;DatabaseName=xie", "sa", "123456");
        // sql中的？代表占位符，  预处理执行器特有
        String sql = "insert into Pgrade(sno,cno,grade) values(?, ?, ?)";
        //一个运用程序要实现对数据库的操作，其中一部是在代码中拼接出操作数据库的sql语句。
        //这里的sql本质上只是一个字符串，然后通过两个判断对其拼接。
        // 只不过拼接好之后可以用作数据库操作的sql语句。
        PreparedStatement ps = conn.prepareStatement(sql);
        // 填充第几个？
        ps.setString(1, v1);
        //它是oracle中定义的char类型的字段造成的，在oracle中，char表示定长的字符串，
        //当字符串长度不够时，数据库会自动用空格补全到指定长度。
        //然后当你进行数据库语句的操作时，就会出现这样的现象
        //当进行不带占位符的语句的操作时，可以操作成功；
        ps.setString(2, v2);
        //它是oracle中定义的char类型的字段造成的，在oracle中，char表示定长的字符串，
        //当字符串长度不够时，数据库会自动用空格补全到指定长度。
        //然后当你进行数据库语句的操作时，就会出现这样的现象
        //当进行不带占位符的语句的操作时，可以操作成功；
        ps.setInt(3, v3);
        //它是oracle中定义的char类型的字段造成的，在oracle中，char表示定长的字符串，
        //当字符串长度不够时，数据库会自动用空格补全到指定长度。
        //然后当你进行数据库语句的操作时，就会出现这样的现象
        //当进行不带占位符的语句的操作时，可以操作成功；
        /*ps.setString(4, v4);
        ps.setInt(5, v5);
        ps.setString(6, v6);
        ps.setInt(7, v7);*/

        // 3
        // exuecuteQuery 用于 Select  executeUpdate()用于修改CUD
        int rs = ps.executeUpdate();
        //定义rs = ps.executeUpdate
        conn.close();
        //关闭
        return rs;
        //结束
    }

    public List<PgradePojo> selectBySno(String sno) throws SQLException {
        //2. 创建连接 localhost:1433;DatabaseName=数据库名
        Connection conn = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;DatabaseName=xie", "sa", "123456");
        //sql中的？代表占位符，  预处理执行器特有
        String sql = "select sno,cno,grade\n" +
                "from Pgrade\n" +
                "where sno=?";
        PreparedStatement ps = conn.prepareStatement(sql);
        //填充第几个？
        ps.setString(1,sno);
        // 3
        ArrayList<PgradePojo> slist = new ArrayList<>();
        ResultSet rs = ps.executeQuery();
        //查询结果接口
        while (rs.next())
        //循环语句
        {
            PgradePojo pojo = new PgradePojo();
            // PgradePojo pojo = new PgradePojo
            slist.add(pojo);
            //表添加
            pojo.setSno(rs.getString(1));
            //pojo.setSno(rs.getString(1));
            pojo.setCno(rs.getString(2));
            /*pojo.setSdate(rs.getString(3));
            pojo.setSex(rs.getString(4));*/
            pojo.setGrade(rs.getInt(3));
           /* pojo.setCareer(rs.getString(6));
            pojo.setCid(rs.getInt(7));*/
            System.out.println("学号为："+rs.getString(1)+"  "
                    +"课号为："+rs.getString(2)+"  "
                   /* +"成绩为："+rs.getString(3)+"  "
                    +"性别为："+rs.getString(4)+"  "
                    +"成绩为："+rs.getString(5)+"  "
                    +"专业为："+rs.getString(6)+"  "*/
                    +"成绩为："+rs.getString(3));
        }
        conn.close();
        return slist;
        //结束
    }
}
